package com.test.utils.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtils {

    public static void main(String[] args) throws Exception {

        List<File> files = Arrays.asList(new File("D:/1.txt"),new File("D:/2.java"));
        String zipPath = ZipUtils.createZip(new File("D:\\Java\\FTP\\FlashFXP\\language"),"D:/test","test.zip");
        System.out.println("zip生成位置："+zipPath);
    }

    /**
     * 生成压缩包
     * @param zipChildFile  要打包压缩的文件数组
     * @param zipSaveDir    压缩包要保存的位置
     * @param zipName       压缩包名称
     * @return              压缩包路径
     */
    public static String createZip(File[] zipChildFile, String zipSaveDir, String zipName) throws Exception{
        File zipRoot = new File(zipSaveDir);
        if(zipRoot.exists()){
            zipRoot.mkdirs();
        }

        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(zipSaveDir,zipName)));
        for (File file:zipChildFile) {
            byte[] buf = new byte[1024*100];
            zos.putNextEntry(new ZipEntry(file.getName()));
            int len;
            FileInputStream in = new FileInputStream(file);
            while((len=in.read(buf))!=-1){
                zos.write(buf,0,len);
            }
            zos.closeEntry();
            in.close();
        }
        zos.close();

        return zipSaveDir+"/"+zipName;
    }


    /**
     * 生成压缩包
     * @param zipChildFile  要打包压缩的文件数组
     * @param zipSaveDir    压缩包要保存的位置
     * @param zipName       压缩包名称
     * @return              压缩包路径
     */
    public static String createZip(List<File> zipChildFile,String zipSaveDir,String zipName) throws Exception{

        File[] files = zipChildFile.toArray(new File[zipChildFile.size()]);
        return createZip(files,zipSaveDir,zipName);
    }


    /**
     * 生成压缩包 -- 支持文件夹 不支持子目录
     * @param dir           要打包压缩的文件夹
     * @param zipSaveDir    压缩包要保存的位置
     * @param zipName       压缩包名称
     * @return              压缩包路径
     */
    public static String createZip(File dir,String zipSaveDir,String zipName) throws Exception{
        return createZip(dir.listFiles(),zipSaveDir,zipName);
    }
}